package com.dh.leetcode.six;

import java.util.Arrays;

/**
 * @ClassName: _628_maximum_product_of_three_numbers
 * @Description: 628. 三个数的最大乘积
 * 给定一个整型数组，在数组中找出由三个数组成的最大乘积，并输出这个乘积。
 *
 * 示例 1:
 *
 * 输入: [1,2,3]
 * 输出: 6
 * 示例 2:
 *
 * 输入: [1,2,3,4]
 * 输出: 24
 * 注意:
 *
 * 给定的整型数组长度范围是[3,104]，数组中所有的元素范围是[-1000, 1000]。
 * 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
 *
 * https://leetcode-cn.com/problems/maximum-product-of-three-numbers/
 *
 * @Author: shouzimu
 * @Date: 2021/1/20 8:40
 */
public class _628_maximum_product_of_three_numbers {
    /**
     * 第一次解答错误
     * 没考虑负数的情况
     *
     * 所以解答方法为：
     * 先排序
     * 如果都为正或者都为负，则是数组末尾三个相乘
     * 如果有正有负
     * 则前两个相乘再乘最后一位
     *
     * @param nums
     * @return
     */
    public int maximumProduct(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length;
        return Math.max(nums[len - 1] * nums[len - 2] * nums[len - 3], nums[0] * nums[1] * nums[len - 1]);
    }
}
